home *** CD-ROM | disk | FTP | other *** search
/ United Public Domain Gold 2 / United Public Domain Gold 2.iso / utilities / pu084.dms / pu084.adf / scsi / SCSIdvr (.txt) < prev    next >
AmigaBASIC Source Code  |  1992-06-29  |  4KB  |  186 lines

  1. REM SCSI adapter Test program
  2. REM 2/27/87 Rich Frantz
  3. REM Commands per PRIAM spec
  4. REM +++++++++++++++++++++++++
  5. REM         EQUATES
  6. REM +++++++++++++++++++++++++
  7. Port0 = 8388608
  8. Port1 = Port0 + 2
  9. Port2 = Port0 + 4
  10. Port3 = Port0 + 6
  11. Port4 = Port0 + 8
  12. Port5 = Port0 + 10
  13. Port6 = Port0 + 12
  14. Port7 = Port0 + 14
  15. DIM sdata(520)
  16. DIM rdata(520)
  17. BLK = 1
  18. CLI:   POKE Port1,0 : REM clr SCSI bus
  19.        POKE Port3,0
  20.        IF stat > 0 THEN GOTO SENSE1:
  21.        GOSUB STATUS:
  22.        IF bsyf = 0 THEN CLI1:
  23.        PRINT "SCSI Bus BUSY"
  24.        INPUT "Retry ";q$
  25.        IF q$ = "Y" THEN CLI:
  26.        IF q$ = "R" THEN RST:
  27.        END
  28. CLI1:  INPUT "WHAT CMD (R) , (W) , (F) , (I) , (S) , (D)";q$
  29.        IF q$ = "D" THEN DRIVE:
  30.        IF q$ = "R" THEN REED:
  31.        IF q$ = "W" THEN RITE:
  32.        IF q$ = "F" THEN FORMAT:
  33.        IF q$ = "I" THEN SENSE:
  34.        IF q$ = "S" THEN GOTO ST1:
  35.        PRINT  "Bad command ! ";CHR$(7)
  36.        GOTO CLI:
  37.        
  38. SENSE1: stat1 = INT(stat/16)
  39.  
  40.         stat = stat - (stat1*16)
  41.         IF stat > 0 THEN SENSE:
  42.         GOTO CLI:
  43.                       
  44.        
  45. DRIVE: INPUT "What is the drive no. ";dr
  46.        LU = dr * 16
  47.        INPUT "What is the SCSI ID no. ";scsi
  48.        GOTO CLI:
  49.               
  50. ST1:   PRINT "Sataus  -  "; HEX$(stat)
  51.        PRINT "Message "; 
  52.        FOR x = 1 TO (rmx - 1)
  53.        PRINT " - ";HEX$(mdat(x));
  54.        NEXT x
  55.        PRINT 
  56.        PRINT "RxData  ";
  57.        FOR x = 1 TO (rdx - 1) 
  58.        PRINT " - ";HEX$(rdata(x));
  59.        NEXT x
  60.        PRINT 
  61.        GOTO CLI:       
  62.        
  63. SENSE: cblk = 6
  64.        dblk = 512
  65.        mblk = 8
  66.        cmd(1) = 3 : cmd(2) = LU : cmd(3) = 0 : cmd(4) = 0 : cmd(5) = 4 : cmd(6) = 0       
  67.        GOTO START:
  68.  
  69. REED:  cblk = 6
  70.        dblk = 512
  71.        mblk = 6
  72.        cmd(1) = 8 : cmd(2) = LU+LBA3 : cmd(3) = LBA2 : cmd(4) = LBA1 :cmd(5) = BLK : cmd(6) = 0
  73.        INPUT "Starting address (l,m,h)";LBA1,LBA2,LBA3
  74.        GOTO START:
  75.        
  76. RITE:  cblk = 6
  77.        dblk = 512
  78.        mblk = 6
  79.        cmd(1) = 10 : cmd(2) = LU+LBA3 : cmd(3) = LBA2 : cmd(4) = LBA1 : cmd(5) = BLK : cmd(6) = 0
  80.        FOR l = 1 TO 512
  81.        sdata(l) = l
  82.        NEXT l
  83.        INPUT "Starting address (l,m,h)";LBA1,LBA2,LBA3
  84.        GOTO START:
  85.        
  86. FORMAT: INPUT "THIS WILL DESTROY ALL DATA ON THE DISK ! (Y) ";q$ 
  87.         IF q$ = "Y" THEN FORM1:
  88.         GOTO CLI:
  89. FORM1:  cblk = 6
  90.         dblk = 512
  91.         mblk = 6
  92.         cmd(1) = 4 : cmd(2) = LU : cmd(3) = 0 : cmd(4) = 0 : cmd(5) = 0 : cmd(6) = 0
  93.         GOTO START:         
  94.         
  95. RST:    POKE Port1,128
  96.         GOTO CLI:                     
  97.            
  98. START: cx = 1 : sdx = 1 : rdx = 1 : rmx = 1 
  99.        GOTO SEL:
  100. STRT:  GOSUB STATUS:
  101.        IF bsyf = 1 AND cmdf = 1 AND msgf = 0 AND inf = 0 THEN GOTO SCMD:
  102.        IF bsyf = 1 AND cmdf = 1 AND inf = 1 AND msgf = 0 THEN GOTO RDSTAT:
  103.        IF bsyf = 1 AND msgf = 1 AND cmdf = 1 AND inf = 1 THEN GOTO RMSG:
  104.        IF bsyf = 1 AND inf = 1 THEN GOTO RDAT:
  105.        IF bsyf = 1 THEN GOTO SDAT:
  106.        GOTO CLI:
  107.  
  108. REM ++++++++++++++++++++++++
  109. REM      SUBROUTINES
  110. REM ++++++++++++++++++++++++
  111.  
  112.  
  113. SEL:   PRINT "Selecting dev 1 "
  114.        POKE Port0,9 :REM select target dev 0 , init = 7
  115.        POKE Port1,5
  116. SEL1:  GOSUB STATUS:
  117.        IF bsyf = 0 THEN SEL1:
  118.        GOTO STRT:      
  119.   
  120. STATUS:  t = PEEK(Port4+1)
  121.          t1 = PEEK(Port4+1)
  122.          IF t <> t1 THEN GOTO STATUS:
  123.          rstf = 0 : bsyf = 0 : reqf = 0 : msgf = 0 : cmdf = 0 : inf = 0 : self = 0
  124.          IF t < 128 THEN 2         
  125.          t=t-128 : rstf = 1
  126.        2 IF t < 64 THEN 3
  127.          t=t-64 : bsyf = 1
  128.        3 IF t < 32 THEN 4
  129.          t=t-32 : reqf = 1
  130.        4 IF t < 16 THEN 5
  131.          t=t-16 : msgf = 1
  132.        5 IF t < 8 THEN 6
  133.          t=t-8 : cmdf = 1
  134.        6 IF t < 4 THEN 7
  135.          t=t-4 : inf = 1
  136.        7 IF t < 2 THEN 8
  137.          t=t-2 : self = 1
  138.        8 RETURN
  139.         
  140. REQACK:  GOSUB STATUS:        
  141.          IF reqf = 0 THEN REQACK:
  142.          PRINT ph$; bstf;msgf;cmdf;inf; "req/";
  143.          tempd = PEEK(Port0 + 1)
  144.          POKE Port1,17 : REM set ack and databus
  145. REQ1:    GOSUB STATUS:
  146.          IF reqf = 1 THEN REQ1:
  147.          PRINT "ack" 
  148.          POKE Port1,1 : REM clear ack
  149.          RETURN
  150.          
  151. SCMD:    POKE Port0,cmd(cx)
  152.          POKE Port3,2
  153.          ph$ = "cmd      "
  154.          GOSUB REQACK:
  155.          cx = cx + 1
  156.          GOTO STRT:
  157.         
  158. SDAT:    POKE Port0,sdata(sdx)
  159.          POKE Port3,1
  160.          ph$ = "snd data "
  161.          GOSUB REQACK:
  162.          sdx = sdx + 1
  163.          GOTO STRT:
  164.          
  165. RDAT:    ph$ = "rx data  "
  166.          POKE Port3,0
  167.          GOSUB REQACK:
  168.          rdata(rdx) = tempd
  169.          rdx = rdx + 1
  170.          GOTO STRT:
  171.          
  172. RMSG:    ph$ = "rx msg   "
  173.          POKE Port3,4
  174.          GOSUB REQACK:
  175.          mdat(rmx) = tempd
  176.          rmx = rmx + 1
  177.          GOTO STRT:                                              
  178.  
  179. RDSTAT:  ph$ = "status   "
  180.          GOSUB REQACK:
  181.          stat = tempd
  182.          GOTO STRT: 
  183.          
  184.    
  185.    
  186.